/**
 * let 用于声明变量，const 用于声明常量
 *
 * 使用 let 或 const 声明的变量和常量有以下特点
 *  ● 拥有块级作用域
 *  ● 不存在变量提升
 *  ● 暂时性死区：无法访问外层作用域的同名变量
 */

// 拥有块级作用域 >>>
{
  const username = '张智琦'
  let age = 18
}
// console.log(username) // ReferenceError: username is not defined
// console.log(age) // ReferenceError: age is not defined
// 拥有块级作用域 <<<

// 不存在变量提升 >>>
// console.log(username) // ReferenceError: Cannot access 'username' before initialization
// console.log(age) // ReferenceError: Cannot access 'age' before initialization
const username = '男'
let age = 18
// 不存在变量提升 <<<

// 暂时性死区：无法访问外层作用域的同名变量 >>>
const phoneNumber = '18336852645'
const email = 'chi_account@163.com'
{
  // console.log(phoneNumber) // ReferenceError: Cannot access 'phoneNumber' before initialization
  // console.log(email) // ReferenceError: Cannot access 'email' before initialization
  const phoneNumber = '18336852645'
  const email = 'chi_account@163.com'
}
// 暂时性死区：无法访问外层作用域的同名变量 <<<
